#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "unistd.h"

//  无名管道
#define	 DELAY	(2)

/*
	实现： 父进程写， 子进程读；
	无名管道的读端和写端是固定的，
	即： FD[0]固定用于读数据（即读端）,  
	     FD[1]固定用于写数据（即写端）。
	
	例子中， 若向FD[0]写数据， 会写入失败；
*/


int main(int argc, char const *argv[])
{
	pid_t pid;
	int pipe_fd[2];
	char rbuf[256];
	char wbuf[]="abcd123";
	int ret;

	if(pipe(pipe_fd)<0) {
		printf("pipe err\n");
		exit(1);
	}

	pid = fork();
	
	//  子进程 
	if(pid==0) {
		printf("child ...\n");

		close(pipe_fd[1]);
		sleep(DELAY*3);

		if(read(pipe_fd[0], rbuf, sizeof(rbuf))>0) {
			printf("read %s\n", rbuf);
		}

		close(pipe_fd[0]);
		exit(0);

	}
	else if(pid>0) {	//  父进程
		printf("father ...\n");

		close(pipe_fd[0]);
		sleep(DELAY);

		if(write(pipe_fd[1], wbuf, strlen(wbuf)) != -1) {
			printf("write buf: %s\n", wbuf);
		}

		close(pipe_fd[1]);
		exit(0);
	}
	else {
		printf("err\n");
	}
	

	
	return 0;
}


